package com.demo.templateMethod13;

//抽象类定义整个流程骨架

/**
 * 举个例子，以准备去学校所要做的工作（prepareGotoSchool）为例，假设需要分三步：穿衣服（dressUp），
 * 吃早饭（eatBreakfast），带上东西（takeThings）。学生和老师要做得具体事情肯定有所区别。
 */
public abstract class AbstractPerson{
     //模板方法，使用final修改，防止子类改变算法的实现步骤
     //     实现了模板方法，定义了算法的骨架。
     public final void prepareGotoSchool(){
          dressUp();
          eatBreakfast();
          takeThings();
     }
     //以下是不同子类根据自身特性完成的具体步骤
     protected abstract void dressUp();
     protected abstract void eatBreakfast();
     protected abstract void takeThings();
}